#ifndef __CORE_DELAY_H
#define __CORE_DELAY_H

#include "stm32f1xx.h"

#define USE_DWT_DELAY  1  /* 使用DWT内核精确延时 */

//#if USE_DWT_DELAY
//    #define USE_TICK_DELAY  0  /* 不使用SysTick延时 */
//#else
//    #define USE_TICK_DELAY  1  /* 使用SysTick延时 */
//#endif

/* 简单任务管理 */
#define TASK_ENABLE  0
#define NumOfTask    3

#if USE_DWT_DELAY

/* 获取内核时钟频率 */
#define GET_CPU_ClkFreq()       (SystemCoreClock)
#define SysClockFreq            (SystemCoreClock)

/* 为方便使用，在延时函数内部调用CPU_TS_TmrInit函数初始化时间戳寄存器，
   这样每次调用函数都会初始化一遍。
   若在main函数刚运行时调用CPU_TS_TmrInit可避免每次都初始化，设置此宏为0。 */
#define CPU_TS_INIT_IN_DELAY_FUNCTION  0

#define CPU_TS_Tmr_Delay_MS(ms)  CPU_TS_Tmr_Delay_US(ms * 1000)
#define CPU_TS_Tmr_Delay_S(s)    CPU_TS_Tmr_Delay_MS(s * 1000)

uint32_t CPU_TS_TmrRd(void);
void DWT_Init(void);
/* 使用以下函数前必须先调用CPU_TS_TmrInit函数使能计数器，或使能宏CPU_TS_INIT_IN_DELAY_FUNCTION */
/* 最大延时值为60秒 */
void CPU_TS_Tmr_Delay_US(uint32_t us);
uint32_t CPU_TS_TmRus(void);

#endif /* USE_DWT_DELAY */

#endif /* __CORE_DELAY_H */
